package com.xyrl.project.common.base.service;

import com.xyrl.project.common.authentication.LoginInfo;
import com.xyrl.project.common.csr.entity.CsrUser;
import com.xyrl.project.common.system.entity.Menu;
import com.xyrl.project.common.system.entity.Role;
import com.xyrl.project.common.system.entity.User;
import com.xyrl.project.common.system.entity.UserConfig;

import java.util.List;

public interface CacheService {

    /**
     * 测试 Redis是否连接成功
     */
    void testConnect() throws Exception;

    /**
     * 从缓存中获取用户
     *
     * @param username 用户名
     * @return User
     */
    User getUser(String username) throws Exception;

    /**
     * 取得缓存用户
     *
     * @param username
     * @return
     * @throws Exception
     */
    CsrUser getCustomerUser(String username) throws Exception;

    /**
     * 从缓存中获取用户角色
     *
     * @param username 用户名
     * @return 角色集
     */
    List<Role> getRoles(String username) throws Exception;

    /**
     * 从缓存中获取用户权限
     *
     * @param username 用户名
     * @return 权限集
     */
    List<Menu> getPermissions(String username) throws Exception;

    /**
     * 从缓存中获取用户个性化配置
     *
     * @param userId 用户 ID
     * @return 个性化配置
     */
    UserConfig getUserConfig(String userId) throws Exception;

    /**
     * 缓存用户信息，只有当用户信息是查询出来的，完整的，才应该调用这个方法
     * 否则需要调用下面这个重载方法
     *
     * @param user 用户信息
     */
    void saveUser(User user) throws Exception;

    /**
     * 缓存用户信息
     *
     * @param username 用户名
     */
    void saveUser(String username) throws Exception;

    /**
     * 缓存用户角色信息
     *
     * @param username 用户名
     */
    void saveRoles(String username) throws Exception;
    /**
     * 缓存用户角色
     * @author zhongp
     * @date 2020-01-02 10:16:03
     * @param username
     * @param roleList
    */
    void saveRoles(String username,List<Role> roleList) throws Exception;
    /**
     * 缓存用户权限信息
     *
     * @param username 用户名
     */
    void savePermissions(String username) throws Exception;
    /**
     * 缓存用户权限
     * @author zhongp
     * @date 2020-01-02 10:25:23
     * @param username 登录帐号
     * @param lists 权限列表
    */
    void savePermissions(String username,List<Menu> lists) throws Exception;

    /**
     * 缓存用户个性化配置
     *
     * @param userId 用户 ID
     */
    void saveUserConfigs(String userId) throws Exception;
    /**
     *缓存用户个性化配置
     * @author zhongp
     * @date 2020-01-02 10:30:13
     * @param userId
     * @param userConfig
    */
    void saveUserConfigs(String userId,UserConfig userConfig) throws Exception;

    /**
     * 删除用户信息
     *
     * @param username 用户名
     */
    void deleteUser(String username);

    /**
     * 删除用户角色信息
     *
     * @param username 用户名
     */
    void deleteRoles(String username);

    /**
     * 删除用户权限信息
     *
     * @param username 用户名
     */
    void deletePermissions(String username);

    /**
     * 删除用户个性化配置
     *
     * @param userId 用户 ID
     */
    void deleteUserConfigs(String userId);

    /**
     * 缓存用户登录信息
     *
     * @param ip    用户ip
     * @param info  用户信息（登录帐号，帐号类型）
     * @param token 认证token
     * @author zhongp
     * @date 2020-01-02 10:00:55
     */
    String cacheLoginUser(String ip, LoginInfo info, String token);

    /**
     * 清除用户登录信息
     *
     * @param token
     * @author zhongp
     * @date 2020-01-02 10:02:06
     */
    void clearCacheLoginUser(String token);
}
